Utforska CSS @when-regeln, en kraftfull funktion för villkorlig stilapplikation baserad pÄ webblÀsarstöd, fönsterstorlek och mer. LÀr dig med praktiska exempel.
CSS @when Regel: BemÀstra Villkorlig Stilapplikation
CSS-vÀrlden utvecklas stÀndigt och erbjuder utvecklare mer kraftfulla och flexibla sÀtt att styla webbsidor. En sÄdan funktion som fÄr allt större genomslag Àr @when
-regeln, Àven kÀnd som CSS Conditional Rules Module Level 1. Denna regel lÄter dig applicera CSS-stilar villkorligt, baserat pÄ att specifika villkor Àr uppfyllda. Det Àr ett kraftfullt verktyg för responsiv design, funktionsdetektering och för att skapa mer robusta och anpassningsbara stylesheets.
Vad Àr CSS @when-regeln?
@when
-regeln Àr en villkorlig at-regel i CSS som lÄter dig definiera stilar som endast tillÀmpas om vissa villkor Àr sanna. TÀnk pÄ det som ett if
-uttalande för din CSS. Till skillnad frÄn mediatillfrÄganden, som frÀmst fokuserar pÄ fönsterkarakteristika (skÀrmstorlek, orientering etc.), ger @when
ett mer generellt och utbyggbart sÀtt att hantera villkorlig stil. Den utökar befintliga villkorliga at-regler som @supports
och @media
.
Viktiga Fördelar med att AnvÀnda @when
- FörbÀttrad KodlÀsbarhet: Genom att inkapsla villkorlig logik inom
@when
-block gör du din CSS enklare att förstÄ och underhÄlla. Syftet bakom specifika stilapplikationer blir tydligare. - FörbÀttrad Flexibilitet:
@when
kan hantera mer komplexa villkor Àn traditionella mediatillfrÄganden, sÀrskilt nÀr det kombineras med funktionsfrÄgor och JavaScript-driven logik (med hjÀlp av CSS Custom Properties). - Förenklad Funktionsdetektering:
@when
integreras sömlöst med@supports
, vilket lÄter dig applicera stilar endast nÀr specifika webblÀsarfunktioner Àr tillgÀngliga. Detta Àr avgörande för progressiv förbÀttring. - Mer Semantisk Stil:
@when
lÄter dig styla element baserat pÄ deras status eller kontext, vilket leder till mer semantisk och underhÄllbar CSS. Till exempel, stilning av element baserat pÄ dataattribut eller anpassade egenskaper instÀllda av JavaScript.
Syntax för @when-regeln
Den grundlÀggande syntaxen för@when
-regeln Àr som följer:
@when <villkor> {
/* CSS-regler som ska tillÀmpas nÀr villkoret Àr sant */
}
<villkor>
kan vara vilket giltigt booleskt uttryck som helst som utvÀrderas till sant eller falskt. Detta uttryck involverar ofta:
- MediatillfrÄganden: Villkor baserade pÄ fönsterkarakteristika (t.ex. skÀrmbredd, enhetsorientering).
- FunktionsfrÄgor (@supports): Villkor baserade pÄ webblÀsarstöd för specifika CSS-funktioner.
- Boolesk Algebra: Kombinera flera villkor med logiska operatorer (
and
,or
,not
).
Praktiska Exempel pÄ @when i AnvÀndning
LÄt oss utforska nÄgra praktiska exempel för att illustrera kraften och mÄngsidigheten hos@when
-regeln.
1. Responsiv Design med @when och MediatillfrÄganden
Det vanligaste anvÀndningsfallet för@when
Ă€r responsiv design, dĂ€r du justerar stilar baserat pĂ„ skĂ€rmstorlek. Ăven om mediatillfrĂ„ganden kan uppnĂ„ detta pĂ„ egen hand, ger @when
ett mer strukturerat och lÀsbart tillvÀgagÄngssÀtt, sÀrskilt vid hantering av komplexa villkor.
@when (min-width: 768px) and (max-width: 1023px) {
body {
font-size: 18px;
line-height: 1.6;
}
.container {
width: 720px;
margin: 0 auto;
}
}
@when
-blocket endast nÀr skÀrmbredden Àr mellan 768px och 1023px (typisk surfplattastorlek). Detta ger ett tydligt och koncist sÀtt att definiera stilar för specifika fönsterintervall.
Internationell Notering: Responsiv design Àr avgörande för en global publik. TÀnk pÄ varierande skÀrmstorlekar i olika regioner. Till exempel Àr mobilanvÀndning högre i vissa lÀnder, vilket gör mobil-först design Ànnu viktigare.
2. Funktionsdetektering med @when och @supports
@when
kan kombineras med @supports
för att applicera stilar endast nÀr en specifik CSS-funktion stöds av webblÀsaren. Detta lÄter dig progressivt förbÀttra din webbplats, vilket ger en bÀttre upplevelse för anvÀndare med moderna webblÀsare samtidigt som kompatibiliteten med Àldre upprÀtthÄlls.
@when supports(display: grid) {
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 20px;
}
}
@when not supports(display: grid) {
.container {
/* Fallback-stilar för webblÀsare som inte stöder grid */
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.item {
width: calc(50% - 10px); /* Justera bredden för Àldre webblÀsare */
}
}
@supports
för att kontrollera om webblÀsaren stöder CSS Grid Layout. Om den gör det, tillÀmpar vi grid-baserade stilar pÄ .container
. Om inte, tillhandahÄller vi fallback-stilar med flexbox för att sÀkerstÀlla att en liknande layout uppnÄs i Àldre webblÀsare.
Global TillgĂ€nglighetsnotering: Funktionsdetektering Ă€r viktig för tillgĂ€nglighet. Ăldre webblĂ€sare kanske saknar stöd för nyare ARIA-attribut eller semantiska HTML5-element. Ge lĂ€mpliga fallbacks för att sĂ€kerstĂ€lla att innehĂ„llet förblir tillgĂ€ngligt.
3. Kombinera MediatillfrÄganden och FunktionsfrÄgor
Den verkliga kraften hos@when
ligger i dess förmÄga att kombinera mediatillfrÄganden och funktionsfrÄgor för att skapa mer komplexa och nyanserade villkorliga stilregler.
@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
.modal {
background-color: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(10px);
}
}
.modal
-elementet endast att ha en suddig bakgrund nÀr skÀrmbredden Àr minst 768px och webblÀsaren stöder egenskapen backdrop-filter
. Detta lÄter dig skapa visuellt tilltalande effekter i moderna webblÀsare, samtidigt som potentiella prestandaproblem eller renderingfel i Àldre undviks.
4. Stilning Baserad pÄ Anpassade Egenskaper (CSS-variabler)
@when
kan ocksÄ anvÀndas i kombination med CSS Custom Properties (Àven kÀnda som CSS-variabler) för att skapa dynamiska och tillstÄnds-drivna stilar. Du kan anvÀnda JavaScript för att uppdatera vÀrdet pÄ en anpassad egenskap och sedan anvÀnda @when
för att tillÀmpa olika stilar baserat pÄ det vÀrdet.
Definiera först en anpassad egenskap:
:root {
--theme-color: #007bff; /* Standard temafÀrg */
--is-dark-mode: false;
}
@when
för att tillÀmpa stilar baserat pÄ vÀrdet av den anpassade egenskapen:
@when var(--is-dark-mode) = true {
body {
background-color: #333;
color: #fff;
}
a {
color: #ccc;
}
}
--is-dark-mode
-egenskapen:
document.getElementById('darkModeToggle').addEventListener('click', function() {
document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});
@when ( --is-dark-mode > 0 ) { ... }
TillgÀnglighetsnotering: Att erbjuda alternativa teman (t.ex. mörkt lÀge) Àr avgörande för tillgÀnglighet. AnvÀndare med synnedsÀttning kan ha nytta av högkontrastteman. Se till att din temavÀxlare Àr tillgÀnglig via tangentbord och skÀrmlÀsare.
5. Stilning Baserad pÄ Dataattribut
Du kan ocksÄ anvÀnda@when
med dataattribut för att styla element baserat pÄ deras datavÀrden. Detta kan vara anvÀndbart för att skapa dynamiska grÀnssnitt dÀr element Àndrar utseende baserat pÄ anvÀndarinteraktion eller datauppdateringar.
LÄt oss sÀga att du har en lista med uppgifter, och varje uppgift har ett data-status
-attribut som anger dess status (t.ex. "todo", "in-progress", "completed"). Du kan anvÀnda @when
för att styla varje uppgift annorlunda baserat pÄ dess status.
[data-status="todo"] {
/* Standardstilar för todo-uppgifter */
color: #333;
}
@when attribute(data-status string equals "in-progress") {
[data-status="in-progress"] {
color: orange;
font-style: italic;
}
}
@when attribute(data-status string equals "completed") {
[data-status="completed"] {
color: green;
text-decoration: line-through;
}
}
WebblÀsarkompatibilitet och Polyfills
I slutet av 2024 utvecklas webblÀsarstödet för@when
-regeln fortfarande. Medan mÄnga moderna webblÀsare stöder kÀrnfunktionaliteten, kanske Àldre webblÀsare inte gör det. DÀrför Àr det avgörande att kontrollera kompatibilitetstabeller och anvÀnda lÀmpliga fallbacks eller polyfills dÀr det behövs.
Konsultera alltid resurser som Can I use... för att kontrollera den aktuella statusen för webblÀsarstödet för @when
och relaterade funktioner.
BÀsta Praxis för AnvÀndning av @when
- HÄll Villkor Enkla: Undvik alltför komplexa villkor inom
@when
-block. Bryt ner komplex logik i mindre, mer hanterbara delar. - TillhandahÄll Fallbacks: TillhandahÄll alltid fallback-stilar för webblÀsare som inte stöder de funktioner du anvÀnder i dina
@when
-regler. Detta sÀkerstÀller en konsekvent upplevelse pÄ olika webblÀsare. - Testa Noggrant: Testa din CSS i en mÀngd olika webblÀsare och enheter för att sÀkerstÀlla att dina
@when
-regler fungerar som förvÀntat. - AnvÀnd Meningsfulla Kommentarer: LÀgg till kommentarer i din CSS för att förklara syftet med varje
@when
-regel och de villkor den baseras pĂ„. Detta gör din kod lĂ€ttare att förstĂ„ och underhĂ„lla. - ĂvervĂ€g Prestanda: Undvik att anvĂ€nda
@when
-regler överdrivet, eftersom de potentiellt kan pÄverka prestandan. Optimera din CSS för att minimera antalet regler som behöver utvÀrderas.
Slutsats
@when
-regeln Ă€r ett kraftfullt tillĂ€gg till CSS-verktygslĂ„dan, som erbjuder utvecklare ett mer flexibelt och uttrycksfullt sĂ€tt att applicera stilar villkorligt. Genom att kombinera den med mediatillfrĂ„ganden, funktionsfrĂ„gor och CSS Custom Properties kan du skapa mer robusta, anpassningsbara och underhĂ„llbara stylesheets. Ăven om webblĂ€sarstödet fortfarande utvecklas, Ă€r @when
en funktion vÀrd att utforska och integrera i ditt moderna webbutvecklingsflöde.
Allt eftersom webben fortsÀtter att utvecklas, kommer det att vara avgörande att bemÀstra funktioner som @when
för att skapa engagerande, tillgÀngliga och performanta upplevelser för anvÀndare över hela vÀrlden. Omfamna kraften i villkorlig stil och lÄs upp nya möjligheter i din CSS-utveckling.